﻿begin tran
	set tran isolation level SERIALIZABLE;
	declare @SoLuongSanPham int, @DiemThuongConLai int
	select @SoLuongSanPham=SoLuong from SanPham with (UPDLOCK) where ID=1 and ThoiGianBatDauBan<=GETDATE() and ThoiGianKetThucBan>=GETDATE()
	select @DiemThuongConLai=DiemThuong from NguoiDung with (UPDLOCK) where ID=1
	if(@DiemThuongConLai<15)
	begin
		raiserror(N'Không thể nhận thưởng vì điểm thưởng còn lại không đủ',10,1)
		rollback tran
		return
	end
	if(@SoLuongSanPham is null)
	begin
		raiserror(N'Không thể nhận thưởng vì sản phẩm đã hết thời hạn bán',10,1)
		rollback tran
		return
	end
	if(@SoLuongSanPham<5)
	begin
		raiserror(N'Không thể nhận thưởng số lượng vượt quá số lượng còn lại của sản phẩm',10,1)
		rollback tran
		return
	end
	update SanPham set SoLuong=SoLuong-5 where ID=1
	update NguoiDung set DiemThuong=DiemThuong-15 where ID=1
	insert into NguoiDung_SanPham(IDNguoiDung,IDSanPham,SoLuong,DonGia,TongGia,NgayMua,IDTrangThaiSanPham,IDDaiLyNhanSanPham,IsPhanThuong,DiemThuong,TongDiemThuong) values(2,1,5,20000,100000,GETDATE(),1,1,1,3,15)
	if(@@ERROR<>0)
	begin
		raiserror(N'Đã có lỗi trong quá trình nhận thưởng sản phẩm',10,1)
		rollback tran
		return
	end
commit tran